/*
 * Copyright (c) 2012 Andrea De Rinaldis <ozioso at ipignoli.dyndns.org>
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

package org.dyndns.ipignoli.droidcruise.ui;

import org.dyndns.ipignoli.droidcruise.notifications.MyNotification;
import org.dyndns.ipignoli.droidcruise.routes.Route;
import android.graphics.Color;
import android.widget.TextView;


public class RouteUI extends UpdatableUI{
  private static final int DISTANCE_LEFT_WARNING = 25;
  private static final int DISTANCE_LEFT_ALERT   = 10;

  private TextView         textLimit;
  private TextView         textEnd;
  private TextView         textRoute;
  private String           defaultMsg;
  private MyNotification   routeNotification;

  public RouteUI(TextView textLimit, TextView textEnd, TextView textRoute,
      String defaultMsg, MyNotification routeNotification){
    super();
    this.textLimit = textLimit;
    this.textEnd = textEnd;
    this.textRoute = textRoute;
    this.defaultMsg = defaultMsg;
    this.routeNotification = routeNotification;
    textRoute.setText(defaultMsg);
  }

  public synchronized String getText(){
    return textRoute.getText().toString();
  }

  public synchronized void setText(Route route){
    if(route == null){
      textEnd.setText("---");
      textEnd.setTextColor(Color.WHITE);
      textLimit.setText("---");
    }
    else{
      double distanceLeft = route.getLength() - route.getDistance();
      double distanceLeftPC = distanceLeft * 100 / route.getLength();
      textEnd.setText(String.valueOf(Math.round(distanceLeft / 10) / 100f));
      if(distanceLeftPC < DISTANCE_LEFT_ALERT)
        textEnd.setTextColor(Color.RED);
      else if(distanceLeftPC < DISTANCE_LEFT_WARNING)
        textEnd.setTextColor(Color.YELLOW);
      else
        textEnd.setTextColor(Color.WHITE);
      textLimit.setText(String.valueOf(route.getLimit()));
    }

    String text = route == null ? defaultMsg : route.toString();
    textRoute.setText(text);
    setRouteAlarm(!defaultMsg.equals(text));
  }

  private void setRouteAlarm(boolean alarmed){
    if(alarmed){
      textRoute.setTextColor(Color.GREEN);
      routeNotification = new MyNotification(routeNotification);
      routeNotification.setText(getText());
      if(delayer.shouldNotify(routeNotification, false))
        queueNotification(routeNotification, false);
    }
    else{
      textRoute.setTextColor(Color.WHITE);
      if(delayer.shouldNotify(routeNotification, true))
        queueNotification(routeNotification, true);
    }
  }
}
